#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    // 字符串的常用操作
    cout << "字符串的常用操作" << "\n";

    string str1 = "Hello";
    cout << "str1= " << str1 << "\n";

    // 字符串长度
    int length = str1.length();
    cout << "字符串 str1 的长度: " << length << "\n";

    str1[0] = 'h'; // 索引从0开始

    cout << "修改后的字符串 str1: " << str1 << "\n";
    cout << "\n";

    // 字符串连接
    string str2 = " World!";
    cout << "str2= " << str2 << "\n";

    string concatenated = str1 + str2;
    cout << "连接后的字符串: " << concatenated << "\n";
    cout << "\n";

    // 字符串查找
    size_t found = concatenated.find("World");

    cout << "空格也算一个字符" << endl;

    cout << "\n";

    // 字符串替换
    cout << "替换前的字符串: " << concatenated << "\n";
    concatenated.replace(found, 5, "C++");
    cout << "将 'World' 替换为 'C++': " << concatenated << "\n";

    // 比较字符串
    if (str1 == str2)
    {
        cout << "str1 和 str2 相等" << "\n";
    }
    else
    {
        cout << "str1 和 str2 不相等" << "\n";
    }

    cout << "\n";

    // 字符串逆序
    // 使用reverse算法将字符串完全反转
    reverse(concatenated.begin(), concatenated.end());
    cout << "逆序后的字符串: " << concatenated << "\n";

    // 使用transform算法将字符串所有字符转换为大写
    // 参数说明：前两个是范围迭代器，第三个是输出位置，最后是转换函数
    transform(concatenated.begin(), concatenated.end(), concatenated.begin(), ::toupper);
    cout << "转换为大写后的字符串: " << concatenated << "\n";

    // 使用transform算法将字符串所有字符转换为小写
    // 参数结构与大写转换相同，使用tolower函数
    transform(concatenated.begin(), concatenated.end(), concatenated.begin(), ::tolower);
    cout << "转换为小写后的字符串: " << concatenated << "\n";

    system("pause");
    return 0;
}
